// Tencent is pleased to support the open source community by making
// 蓝鲸智云 - 监控平台/日志平台 (BlueKing - Monitor/Log) available.
// Copyright (C) 2017-2022 THL A29 Limited, a Tencent company. All rights reserved.
// Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://opensource.org/licenses/MIT
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.
//

package pipeline

import (
	"github.com/TencentBlueKing/bk-collector/define"
	"github.com/TencentBlueKing/bk-collector/processor"
)

// Pipeline 流水线接口定义
type Pipeline interface {
	Name() string
	RecordType() define.RecordType
	Processors() []string
}

type pipeline struct {
	name       string
	recordType define.RecordType
	processors []processor.Instance
}

func NewPipeline(name string, rtype define.RecordType, ps ...processor.Instance) Pipeline {
	return &pipeline{
		name:       name,
		recordType: rtype,
		processors: ps,
	}
}

func (p *pipeline) Name() string                  { return p.name }
func (p *pipeline) RecordType() define.RecordType { return p.recordType }

func (p *pipeline) Processors() []string {
	s := make([]string, 0, len(p.processors))
	for _, v := range p.processors {
		s = append(s, v.ID())
	}
	return s
}
